<!-- via https://www.bilibili.com/video/BV1TACZBUEjS -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
    <title>Protocol: DEFENSE [终极典藏版]</title>
    <script src="https://cdn.tailwindcss.com"></script>
     
    <!-- React & ReactDOM -->
    <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <!-- Babel -->
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
     
    <style>
      @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700;900&display=swap');
      @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap');
      @import url('https://fonts.googleapis.com/css2?family=Rajdhani:wght@500;600;700&display=swap');
       
      :root {
        --c-bg: #050507;
        --c-panel: rgba(18, 22, 32, 0.95);
        --c-cyan: #06b6d4;
        --c-cyan-dim: rgba(6, 182, 212, 0.2);
        --c-red: #ef4444;
        --c-yellow: #eab308;
        --c-purple: #a855f7;
        --c-green: #10b981;
        --c-pink: #ec4899;
      }
 
      body {
        font-family: "Noto Sans SC", sans-serif;
        background-color: var(--c-bg);
        color: #e2e8f0;
        overflow: hidden;
        user-select: none;
        margin: 0;
        padding: 0;
        -webkit-tap-highlight-color: transparent;
      }
 
      .font-tech { font-family: 'Rajdhani', sans-serif; }
      .font-mono { font-family: 'JetBrains Mono', monospace; }
 
      /* --- Visual Effects --- */
      .cyber-bg {
        background-color: #030304;
        background-image: 
            linear-gradient(rgba(6, 182, 212, 0.03) 1px, transparent 1px),
            linear-gradient(90deg, rgba(6, 182, 212, 0.03) 1px, transparent 1px);
        background-size: 40px 40px;
        position: relative;
      }
       
      .hex-overlay {
        position: absolute;
        inset: 0;
        background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M30 0l25.98 15v30L30 60 4.02 45V15z' fill-opacity='0.02' fill='%2306b6d4' fill-rule='evenodd'/%3E%3C/svg%3E");
        opacity: 0.3;
        pointer-events: none;
        z-index: 0;
      }
 
      .scanline {
        position: fixed;
        top: 0; left: 0; right: 0; bottom: 0;
        background: linear-gradient(to bottom, transparent 50%, rgba(0,0,0,0.3) 51%);
        background-size: 100% 4px;
        pointer-events: none;
        z-index: 9999;
        opacity: 0.15;
      }
       
      .vignette {
        position: fixed;
        inset: 0;
        background: radial-gradient(circle at center, transparent 40%, #000 100%);
        pointer-events: none;
        z-index: 9998;
        opacity: 0.6;
      }
 
      /* --- UI Components --- */
      .holo-panel {
        background: var(--c-panel);
        backdrop-filter: blur(12px);
        border: 1px solid rgba(255, 255, 255, 0.08);
        box-shadow: 0 0 30px rgba(0,0,0,0.6);
        position: relative;
        overflow: hidden;
      }
       
      .holo-panel::before {
        content: '';
        position: absolute;
        top: 0; left: 0; width: 100%; height: 2px;
        background: linear-gradient(90deg, transparent, var(--c-cyan), transparent);
        opacity: 0.5;
      }
 
      .clip-tech {
        clip-path: polygon(
          0 0, 
          calc(100% - 15px) 0, 
          100% 15px, 
          100% 100%, 
          15px 100%, 
          0 calc(100% - 15px)
        );
      }
 
      .clip-r {
        clip-path: polygon(0 0, 100% 0, 100% 100%, 20px 100%, 0 calc(100% - 20px));
      }
 
      .btn-tech {
        position: relative;
        background: rgba(6, 182, 212, 0.1);
        border: 1px solid var(--c-cyan-dim);
        color: var(--c-cyan);
        transition: all 0.2s ease;
        text-transform: uppercase;
        font-family: "Noto Sans SC", sans-serif;
        font-weight: 700;
        letter-spacing: 1px;
        cursor: pointer;
        display: flex;
        align-items: center;
        justify-content: center;
      }
       
      .btn-tech:hover:not(:disabled) {
        background: rgba(6, 182, 212, 0.8);
        color: #000;
        box-shadow: 0 0 15px var(--c-cyan);
        text-shadow: none;
      }
       
      .btn-tech:disabled {
        opacity: 0.4;
        cursor: not-allowed;
        filter: grayscale(1);
        background: rgba(0,0,0,0.5);
      }
 
      /* --- Animations --- */
      @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }
      @keyframes pulse-red { 0%, 100% { box-shadow: 0 0 0 rgba(239, 68, 68, 0); } 50% { box-shadow: 0 0 15px rgba(239, 68, 68, 0.5); } }
      @keyframes slideInRight { from { transform: translateX(50px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
      @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
      @keyframes flashWhite { 0% { background-color: transparent; } 50% { background-color: white; } 100% { background-color: transparent; } }
       
      .animate-float { animation: float 3s ease-in-out infinite; }
      .animate-pulse-red { animation: pulse-red 2s infinite; }
       
      .map-grid-cell {
        transition: background-color 0.15s;
      }
       
      /* --- Scrollbar --- */
      ::-webkit-scrollbar { width: 4px; height: 4px; }
      ::-webkit-scrollbar-track { background: #000; }
      ::-webkit-scrollbar-thumb { background: #334155; border-radius: 2px; }
      ::-webkit-scrollbar-thumb:hover { background: var(--c-cyan); }
 
      .custom-scroll {
        -webkit-overflow-scrolling: touch;
      }
 
      /* --- Utility --- */
      .text-shadow-sm { text-shadow: 0 1px 2px rgba(0,0,0,0.8); }
 
      .rarity-7 { border-color: #ef4444; background: linear-gradient(135deg, rgba(239,68,68,0.2), transparent); }
      .rarity-6 { border-color: #facc15; background: linear-gradient(135deg, rgba(250,204,21,0.2), transparent); }
      .rarity-5 { border-color: #fff; background: linear-gradient(135deg, rgba(255,255,255,0.1), transparent); }
      .rarity-4 { border-color: #94a3b8; }
      .rarity-3 { border-color: #475569; }
 
      /* Skin Override */
      .skin-equipped { border-color: #ec4899 !important; background: linear-gradient(135deg, rgba(236,72,153,0.2), transparent) !important; box-shadow: 0 0 10px rgba(236,72,153,0.4) !important; }
 
      /* Mobile adjustments */
      @media (max-width: 768px) {
        .mobile-grid { grid-template-columns: repeat(2, 1fr) !important; }
        .mobile-hide { display: none; }
        .mobile-compact { padding: 0.5rem; }
        .mobile-menu-btn { height: 7rem; }
      }
    </style>
<!-- <link rel="stylesheet" href="/index.css"> -->
</head>
<body>
    <div id="root"></div>
    <script type="text/babel" src="./arknights.js"></script>
</body>
</html>